#include "json_util.h"

namespace AMCAX::Exchange::json_util
{
    std::string get_json_value_by_key(const nlohmann::json &json_item,const std::string &key)
    {
        
        return json_item.contains(key)?(json_item[key].is_null()?"":json_item[key].get<std::string>()) : "" ;
    }

    bool get_json_value_by_key(const nlohmann::json &json_item,const std::string key,bool default_value)
    {
        return json_item.contains(key)?(json_item[key].is_null()?default_value:json_item[key].get<bool>()) : default_value ; 
        // return default_value ;
    }

    nlohmann::json get_json_value_by_key(const nlohmann::json &json_item,const std::string key,nlohmann::json default_value)
    {
        return json_item.contains(key)?(json_item[key].is_null() ? default_value : json_item[key]) : default_value ;
    }

    int get_json_value_by_key(const nlohmann::json &json_item,const std::string key,int default_value)
    {
        return json_item.contains(key)?(json_item[key].is_null()?default_value:json_item[key].get<int>()) : default_value ; 
        // return default_value ;
    }

    double get_json_value_by_key(const nlohmann::json &json_item,const std::string key,double default_value)
    {
        return json_item.contains(key)?(json_item[key].is_null()?default_value:json_item[key].get<double>()) : default_value ; 
    }

    bool IsValidJson(const std::string &s) {
        return nlohmann::json::accept(s);  // 直接检查流是否是合法 JSON
    }

    nlohmann::json ToJson(const std::string &s) 
    {
        nlohmann::json result = {} ;
        if (!IsValidJson(s))
        {
            result["origin"] = s ;
            return result ;
        }
        return nlohmann::json::parse(s) ;
    }

    void test()
    {}
}